



<!doctype html>
<html lang="en" class="no-js">
  <head>
    
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1">
      <meta http-equiv="x-ua-compatible" content="ie=edge">
      
        <meta name="description" content="Distributed Computing for AI Made Simple">
      
      
      
        <meta name="author" content="Jiale Zhi">
      
      
        <meta name="lang:clipboard.copy" content="Copy to clipboard">
      
        <meta name="lang:clipboard.copied" content="Copied to clipboard">
      
        <meta name="lang:search.language" content="en">
      
        <meta name="lang:search.pipeline.stopwords" content="True">
      
        <meta name="lang:search.pipeline.trimmer" content="True">
      
        <meta name="lang:search.result.none" content="No matching documents">
      
        <meta name="lang:search.result.one" content="1 matching document">
      
        <meta name="lang:search.result.other" content="# matching documents">
      
        <meta name="lang:search.tokenizer" content="[\s\-]+">
      
      <link rel="shortcut icon" href="../img/favicon.ico">
      <meta name="generator" content="mkdocs-1.0.4, mkdocs-material-4.6.0">
    
    
      
        <title>Pool - Fiber</title>
      
    
    
      <link rel="stylesheet" href="../assets/stylesheets/application.1b62728e.css">
      
        <link rel="stylesheet" href="../assets/stylesheets/application-palette.a8b3c06d.css">
      
      
        
        
        <meta name="theme-color" content="">
      
    
    
      <script src="../assets/javascripts/modernizr.268332fc.js"></script>
    
    
      
        <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
        <style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
      
    
    <link rel="stylesheet" href="../assets/fonts/material-icons.css">
    
    
    
      
    
    
  </head>
  
    
    
    <body dir="ltr" data-md-color-primary="white" data-md-color-accent="">
  
    <svg class="md-svg">
      <defs>
        
        
          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
        
      </defs>
    </svg>
    <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
    <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
    <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
    
    
      <header class="md-header" data-md-component="header">

    <nav class="md-header-nav md-grid">
        <div class="md-flex">
            <div class="md-flex__cell md-flex__cell--shrink">
                <a class="md-header-nav__button md-logo"
                   href=".." title="Fiber">
                    <img src="../img/fiber_logo.png" style="height:1.4rem;">
                </a>
            </div>
            <div class="md-flex__cell md-flex__cell--shrink">
                <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
            </div>
            <div class="md-flex__cell md-flex__cell--stretch">
                <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
                    
                    <span class="md-header-nav__topic">
                    Pool
                    </span>
                    
                </div>
            </div>
            <div class="md-flex__cell md-flex__cell--shrink">
                
                
                <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
                
<div class="md-search" data-md-component="search" role="dialog">
  <label class="md-search__overlay" for="__search"></label>
  <div class="md-search__inner" role="search">
    <form class="md-search__form" name="search">
      <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
      <label class="md-icon md-search__icon" for="__search"></label>
      <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
        &#xE5CD;
      </button>
    </form>
    <div class="md-search__output">
      <div class="md-search__scrollwrap" data-md-scrollfix>
        <div class="md-search-result" data-md-component="result">
          <div class="md-search-result__meta">
            Type to start searching
          </div>
          <ol class="md-search-result__list"></ol>
        </div>
      </div>
    </div>
  </div>
</div>
                
                
            </div>
            
            <div class="md-flex__cell md-flex__cell--shrink">
                <div class="md-header-nav__source">
                    


  

<a href="https://github.com/uber/fiber/" title="Go to repository" class="md-source" data-md-source="github">
  
    <div class="md-source__icon">
      <svg viewBox="0 0 24 24" width="24" height="24">
        <use xlink:href="#__github" width="24" height="24"></use>
      </svg>
    </div>
  
  <div class="md-source__repository">
    uber/fiber
  </div>
</a>
                </div>
            </div>
            
        </div>
    </nav>
</header>
    
    <div class="md-container">
      
        
      
      
      <main class="md-main" role="main">
        <div class="md-main__inner md-grid" data-md-component="container">
          
            
              <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    <nav class="md-nav md-nav--primary" data-md-level="0">
    <label class="md-nav__title md-nav__title--site" for="__drawer">
        <a class="md-nav__button md-logo" href=".."
           title="Fiber">
            <img src="../img/fiber_logo.png" style="width: 10rem">
        </a>
    </label>
    
    <div class="md-nav__source">
        


  

<a href="https://github.com/uber/fiber/" title="Go to repository" class="md-source" data-md-source="github">
  
    <div class="md-source__icon">
      <svg viewBox="0 0 24 24" width="24" height="24">
        <use xlink:href="#__github" width="24" height="24"></use>
      </svg>
    </div>
  
  <div class="md-source__repository">
    uber/fiber
  </div>
</a>
    </div>
    
    <ul class="md-nav__list" data-md-scrollfix>
        
        
        
        


  <li class="md-nav__item">
    <a href=".." title="Home" class="md-nav__link">
      Home
    </a>
  </li>

        
        
        
        


  <li class="md-nav__item">
    <a href="../why/" title="Why Use Fiber" class="md-nav__link">
      Why Use Fiber
    </a>
  </li>

        
        
        
        


  <li class="md-nav__item">
    <a href="../introduction/" title="Introduction to Fiber" class="md-nav__link">
      Introduction to Fiber
    </a>
  </li>

        
        
        
        


  <li class="md-nav__item">
    <a href="../getting-started/" title="Getting Started" class="md-nav__link">
      Getting Started
    </a>
  </li>

        
        
        
        


  <li class="md-nav__item">
    <a href="../advanced/" title="More about Fiber" class="md-nav__link">
      More about Fiber
    </a>
  </li>

        
        
        
        


  <li class="md-nav__item">
    <a href="../examples/" title="Examples" class="md-nav__link">
      Examples
    </a>
  </li>

        
        
        
        


  <li class="md-nav__item">
    <a href="../installation/" title="Installation" class="md-nav__link">
      Installation
    </a>
  </li>

        
        
        
        


  <li class="md-nav__item">
    <a href="../platforms/" title="Platforms and Backends" class="md-nav__link">
      Platforms and Backends
    </a>
  </li>

        
        
        
        

  


  <li class="md-nav__item md-nav__item--active md-nav__item--nested">
    
      <input class="md-toggle md-nav__toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9" checked>
    
    <label class="md-nav__link" for="nav-9">
      API Documentation
    </label>
    <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
      <label class="md-nav__title" for="nav-9">
        API Documentation
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../process/" title="Process" class="md-nav__link">
      Process
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../queues/" title="Queues" class="md-nav__link">
      Queues
    </a>
  </li>

        
          
          
          

  


  <li class="md-nav__item md-nav__item--active">
    
    <input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
    
    
    <a href="./" title="Pool" class="md-nav__link md-nav__link--active">
      Pool
    </a>
    
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../managers/" title="Managers" class="md-nav__link">
      Managers
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../experimental/ring/" title="Ring" class="md-nav__link">
      Ring
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../config/" title="Config" class="md-nav__link">
      Config
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../meta/" title="Metadata" class="md-nav__link">
      Metadata
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../cli/" title="Command Line Tool" class="md-nav__link">
      Command Line Tool
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../misc/" title="Misc" class="md-nav__link">
      Misc
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

        
    </ul>
</nav>
                  </div>
                </div>
              </div>
            
            
          
          <div class="md-content">
            <article class="md-content__inner md-typeset">
              
                
                  <a href="https://github.com/uber/fiber/edit/master/mkdocs/pool.md" title="Edit this page" class="md-icon md-content__icon">&#xE3C9;</a>
                
                
                <h1 id="fiber.pool">fiber.pool</h1>

<p><em>Pools</em> are supported by Fiber. They allow the user to manage a pool of
worker processes. Fiber extend pools with <em>job-backed processes</em> so that it can
manage thousands of (remote) workers per pool. Users can also create multiple
pools at the same time.</p>
<p>Fiber implements 2 different version of <code>Pool</code>: <code>ZPool</code> and <code>ResilientZPool</code>.
Both has the same API as <code>multiprocessing.Pool</code>. <code>ZPool</code> is pool based on
"r"/"w" socket pairs.
<code>ResilientZPool</code> is <code>ZPool</code> + <a href="../advanced/#error-handling">error handling</a>.
Failed tasks will be resubmitted to the Pool and worked on by other pool
workers.</p>
<p>By default, <code>ResilientZPool</code> is exposed as <code>fiber.Pool</code>.</p>
<p>Example:</p>
<div class="codehilite"><pre><span></span><span class="n">pool</span> <span class="o">=</span> <span class="n">fiber</span><span class="o">.</span><span class="n">Pool</span><span class="p">(</span><span class="n">processes</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="n">pool</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">,</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">))</span>
</pre></div>


<h2 id="fiber.pool.ApplyResult">ApplyResult</h2>

<div class="codehilite"><pre><span></span><span class="n">ApplyResult</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">seq</span><span class="p">,</span> <span class="n">inventory</span><span class="p">)</span>
</pre></div>


<p>An object that is returned by asynchronous methods of <code>Pool</code>. It
represents an handle that can be used to get the actual result.
<h3 id="fiber.pool.ApplyResult.get">get</h3></p>
<div class="codehilite"><pre><span></span><span class="n">ApplyResult</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
</pre></div>


<p>Get the actual result represented by this object</p>
<p><strong>Returns</strong>:</p>
<p>Actual result. This method will block if the actual result
    is not ready.
<h2 id="fiber.pool.MapResult">MapResult</h2></p>
<div class="codehilite"><pre><span></span><span class="n">MapResult</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">seq</span><span class="p">,</span> <span class="n">inventory</span><span class="p">)</span>
</pre></div>


<h2 id="fiber.pool.ZPool">ZPool</h2>

<div class="codehilite"><pre><span></span><span class="n">ZPool</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
      <span class="n">processes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
      <span class="n">initializer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
      <span class="n">initargs</span><span class="o">=</span><span class="p">(),</span>
      <span class="n">maxtasksperchild</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
      <span class="n">cluster</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
      <span class="n">master_sock_type</span><span class="o">=</span><span class="s1">&#39;w&#39;</span><span class="p">)</span>
</pre></div>


<p>A Pool implementation based on Fiber sockets.</p>
<p>ZPool directly uses Fiber sockets instead of SimpleQueue for tasks and
results handling. This makes it faster.
<h3 id="fiber.pool.ZPool.apply_async">apply_async</h3></p>
<div class="codehilite"><pre><span></span><span class="n">ZPool</span><span class="o">.</span><span class="n">apply_async</span><span class="p">(</span><span class="n">func</span><span class="p">,</span>
                  <span class="n">args</span><span class="o">=</span><span class="p">(),</span>
                  <span class="n">kwds</span><span class="o">=</span><span class="p">{},</span>
                  <span class="n">callback</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
                  <span class="n">error_callback</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
</pre></div>


<p>Run function <code>func</code> with arguments <code>args</code> and keyword arguments <code>kwds</code>
on a remote Pool worker. This is an asynchronous version of <code>apply</code>.</p>
<p><strong>Arguments</strong>:</p>
<ul>
<li><code>func</code>: target function to run.</li>
<li><code>args</code>: positional arguments that needs to be passed to <code>func</code>.</li>
<li><code>kwds</code>: keyword arguments that needs to be passed to <code>func</code>.</li>
<li><code>callback</code>: Currently not supported. A callback function that will
    be called when the result is ready.</li>
<li><code>error_callback</code>: Currently not supported. A callback function
    that will be called when an error occurred.</li>
</ul>
<p><strong>Returns</strong>:</p>
<p>An ApplyResult object which has a method <code>.get()</code> to get
    the actual results.
<h3 id="fiber.pool.ZPool.map_async">map_async</h3></p>
<div class="codehilite"><pre><span></span><span class="n">ZPool</span><span class="o">.</span><span class="n">map_async</span><span class="p">(</span><span class="n">func</span><span class="p">,</span>
                <span class="n">iterable</span><span class="p">,</span>
                <span class="n">chunksize</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
                <span class="n">callback</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
                <span class="n">error_callback</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
</pre></div>


<p>For each element <code>e</code> in <code>iterable</code>, run <code>func(e)</code>. The workload is
distributed between all the Pool workers. This is an asynchronous
version of <code>map</code>.</p>
<p><strong>Arguments</strong>:</p>
<ul>
<li><code>func</code>: target function to run.</li>
<li><code>iterable</code>: an iterable object to be mapped.</li>
<li><code>chunksize</code>: if set, elements in <code>iterable</code> will be put in to
    chunks whose size is decided by <code>chunksize</code>. These chunks will be
    sent to Pool workers instead of each elements in <code>iterable</code>. If not
    set, the chunksize is decided automatically.</li>
<li><code>callback</code>: Currently not supported. A callback function that will
    be called when the result is ready.</li>
<li><code>error_callback</code>: Currently not supported. A callback function
    that will be called when an error occurred.</li>
</ul>
<p><strong>Returns</strong>:</p>
<p>An MapResult object which has a method <code>.get()</code> to get
    the actual results.
<h3 id="fiber.pool.ZPool.apply">apply</h3></p>
<div class="codehilite"><pre><span></span><span class="n">ZPool</span><span class="o">.</span><span class="n">apply</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">(),</span> <span class="n">kwds</span><span class="o">=</span><span class="p">{})</span>
</pre></div>


<p>Run function <code>func</code> with arguments <code>args</code> and keyword arguments <code>kwds</code>
on a remote Pool worker.</p>
<p><strong>Arguments</strong>:</p>
<ul>
<li><code>func</code>: target function to run.</li>
<li><code>args</code>: positional arguments that needs to be passed to <code>func</code>.</li>
<li><code>kwds</code>: keyword arguments that needs to be passed to <code>func</code>.</li>
</ul>
<p><strong>Returns</strong>:</p>
<p>the return value of <code>func(*args, **kwargs)</code>.
<h3 id="fiber.pool.ZPool.map">map</h3></p>
<div class="codehilite"><pre><span></span><span class="n">ZPool</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">iterable</span><span class="p">,</span> <span class="n">chunksize</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
</pre></div>


<p>For each element <code>e</code> in <code>iterable</code>, run <code>func(e)</code>. The workload is
distributed between all the Pool workers.</p>
<p><strong>Arguments</strong>:</p>
<ul>
<li><code>func</code>: target function to run.</li>
<li><code>iterable</code>: an iterable object to be mapped.</li>
<li><code>chunksize</code>: if set, elements in <code>iterable</code> will be put in to
    chunks whose size is decided by <code>chunksize</code>. These chunks will be
    sent to Pool workers instead of each elements in <code>iterable</code>. If not
    set, the chunksize is decided automatically.</li>
</ul>
<p><strong>Returns</strong>:</p>
<p>A list of results equivalent to calling
    <code>[func(x) for x in iterable]</code>.
<h3 id="fiber.pool.ZPool.imap">imap</h3></p>
<div class="codehilite"><pre><span></span><span class="n">ZPool</span><span class="o">.</span><span class="n">imap</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">iterable</span><span class="p">,</span> <span class="n">chunksize</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</pre></div>


<p>For each element <code>e</code> in <code>iterable</code>, run <code>func(e)</code>. The workload is
distributed between all the Pool workers. This function returns an
iterator which user and iterate over to get results.</p>
<p><strong>Arguments</strong>:</p>
<ul>
<li><code>func</code>: target function to run.</li>
<li><code>iterable</code>: an iterable object to be mapped.</li>
<li><code>chunksize</code>: if set, elements in <code>iterable</code> will be put in to
    chunks whose size is decided by <code>chunksize</code>. These chunks will be
    sent to Pool workers instead of each elements in <code>iterable</code>. If not
    set, the chunksize is decided automatically.</li>
</ul>
<p><strong>Returns</strong>:</p>
<p>an iterator which user can use to get results.
<h3 id="fiber.pool.ZPool.imap_unordered">imap_unordered</h3></p>
<div class="codehilite"><pre><span></span><span class="n">ZPool</span><span class="o">.</span><span class="n">imap_unordered</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">iterable</span><span class="p">,</span> <span class="n">chunksize</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</pre></div>


<p>For each element <code>e</code> in <code>iterable</code>, run <code>func(e)</code>. The workload is
distributed between all the Pool workers. This function returns an
<strong>unordered</strong> iterator which user and iterate over to get results.
This means that the order of the results may not match the order of
the <code>iterable</code>.</p>
<p><strong>Arguments</strong>:</p>
<ul>
<li><code>func</code>: target function to run.</li>
<li><code>iterable</code>: an iterable object to be mapped.</li>
<li><code>chunksize</code>: if set, elements in <code>iterable</code> will be put in to
    chunks whose size is decided by <code>chunksize</code>. These chunks will be
    sent to Pool workers instead of each elements in <code>iterable</code>. If not
    set, the chunksize is decided automatically.</li>
</ul>
<p><strong>Returns</strong>:</p>
<p>an unordered iterator which user can use to get results.
<h3 id="fiber.pool.ZPool.starmap_async">starmap_async</h3></p>
<div class="codehilite"><pre><span></span><span class="n">ZPool</span><span class="o">.</span><span class="n">starmap_async</span><span class="p">(</span><span class="n">func</span><span class="p">,</span>
                    <span class="n">iterable</span><span class="p">,</span>
                    <span class="n">chunksize</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
                    <span class="n">callback</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
                    <span class="n">error_callback</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
</pre></div>


<p>For each element <code>args</code> in <code>iterable</code>, run <code>func(*args)</code>. The workload
is distributed between all the Pool workers. This is an asynchronous
version of <code>starmap</code>.</p>
<p>For example, <code>starmap_async(func, [(1, 2, 3), (4, 5, 6)])</code> will result
in calling <code>func(1, 2, 3)</code> and <code>func(4, 5, 6)</code> on a remote host.</p>
<p><strong>Arguments</strong>:</p>
<ul>
<li><code>func</code>: target function to run.</li>
<li><code>iterable</code>: an iterable object to be mapped.</li>
<li><code>chunksize</code>: if set, elements in <code>iterable</code> will be put in to
    chunks whose size is decided by <code>chunksize</code>. These chunks will be
    sent to Pool workers instead of each elements in <code>iterable</code>. If not
    set, the chunksize is decided automatically.</li>
<li><code>callback</code>: Currently not supported. A callback function that will
    be called when the result is ready.</li>
<li><code>error_callback</code>: Currently not supported. A callback function
    that will be called when an error occurred.</li>
</ul>
<p><strong>Returns</strong>:</p>
<p>An MapResult object which has a method <code>.get()</code> to get
    the actual results.
<h3 id="fiber.pool.ZPool.starmap">starmap</h3></p>
<div class="codehilite"><pre><span></span><span class="n">ZPool</span><span class="o">.</span><span class="n">starmap</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">iterable</span><span class="p">,</span> <span class="n">chunksize</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
</pre></div>


<p>For each element <code>args</code> in <code>iterable</code>, run <code>func(*args)</code>. The workload
is distributed between all the Pool workers.</p>
<p>For example, <code>starmap_async(func, [(1, 2, 3), (4, 5, 6)])</code> will result
in calling <code>func(1, 2, 3)</code> and <code>func(4, 5, 6)</code> on a remote host.</p>
<p><strong>Arguments</strong>:</p>
<ul>
<li><code>func</code>: target function to run.</li>
<li><code>iterable</code>: an iterable object to be mapped.</li>
<li><code>chunksize</code>: if set, elements in <code>iterable</code> will be put in to
    chunks whose size is decided by <code>chunksize</code>. These chunks will be
    sent to Pool workers instead of each elements in <code>iterable</code>. If not
    set, the chunksize is decided automatically.</li>
<li><code>callback</code>: Currently not supported. A callback function that will
    be called when the result is ready.</li>
<li><code>error_callback</code>: Currently not supported. A callback function
    that will be called when an error occurred.</li>
</ul>
<p><strong>Returns</strong>:</p>
<p>A list of results equivalent to calling
    <code>[func(*arg) for arg in iterable]</code>
<h3 id="fiber.pool.ZPool.close">close</h3></p>
<div class="codehilite"><pre><span></span><span class="n">ZPool</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</pre></div>


<p>Close this Pool. This means the current pool will be put in to a
closing state and it will not accept new tasks. Existing workers will
continue to work on tasks that have been dispatched to them and exit
when all the tasks are done.
<h3 id="fiber.pool.ZPool.terminate">terminate</h3></p>
<div class="codehilite"><pre><span></span><span class="n">ZPool</span><span class="o">.</span><span class="n">terminate</span><span class="p">()</span>
</pre></div>


<p>Terminate this pool. This means that this pool will be terminated and
all its pool workers will also be terminated. Task that have been
dispatched will be discarded.
<h3 id="fiber.pool.ZPool.join">join</h3></p>
<div class="codehilite"><pre><span></span><span class="n">ZPool</span><span class="o">.</span><span class="n">join</span><span class="p">()</span>
</pre></div>


<p>Wait for all the pool workers of this pool to exit. This should be
used after <code>terminate()</code> or <code>close()</code> are called on this pool.
<h2 id="fiber.pool.ResilientZPool">ResilientZPool</h2></p>
<div class="codehilite"><pre><span></span><span class="n">ResilientZPool</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
               <span class="n">processes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
               <span class="n">initializer</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
               <span class="n">initargs</span><span class="o">=</span><span class="p">(),</span>
               <span class="n">maxtasksperchild</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
               <span class="n">cluster</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
</pre></div>


<p>ZPool with error handling. The differences are:</p>
<ul>
<li>Master socket is a ROUTER socket instead of DEALER socket.</li>
<li>Add pending table.</li>
<li>When an died worker is detected, it's jobs are resubmitted to work Q
  in addition to restarting that worker.</li>
</ul>
<p>The API of <code>ResilientZPool</code> is the same as <code>ZPool</code>. One difference is that
if <code>processes</code> argument is not set, its default value is 1.</p>
                
                  
                
                
              
              
                


              
            </article>
          </div>
        </div>
      </main>
      
        

<!-- Application footer -->
<footer class="md-footer">

    <!-- Link to previous and/or next page -->
    
    <div class="md-footer-nav">
        <nav class="md-footer-nav__inner md-grid">

            <!-- Link to previous page -->
            
            <a class="md-flex md-footer-nav__link md-footer-nav__link--prev"
               href="../queues/"
               rel="prev"
               title="Queues">
                <div class="md-flex__cell md-flex__cell--shrink">
                    <i class="md-icon md-icon--arrow-back
                    md-footer-nav__button"></i>
                </div>
                <div class="md-flex__cell md-flex__cell--stretch
                  md-footer-nav__title">
              <span class="md-flex__ellipsis">
                <span class="md-footer-nav__direction">
                  Previous
                </span>
                Queues
              </span>
                </div>
            </a>
            

            <!-- Link to next page -->
            
            <a class="md-flex md-footer-nav__link md-footer-nav__link--next"
               href="../managers/"
               rel="next"
               title="Managers">
                <div class="md-flex__cell md-flex__cell--stretch
                  md-footer-nav__title">
              <span class="md-flex__ellipsis">
                <span class="md-footer-nav__direction">
                  Next
                </span>
                Managers
              </span>
                </div>
                <div class="md-flex__cell md-flex__cell--shrink">
                    <i class="md-icon md-icon--arrow-forward
                    md-footer-nav__button"></i>
                </div>
            </a>
            
        </nav>
    </div>
    

    <!-- Further information -->
    <div class="md-footer-meta md-typeset">
        <div class="md-footer-meta__inner md-grid">

            <!-- Copyright and theme information -->
            <div class="md-footer-copyright">
                <div class="footer-logo-smallpad"></div>
                
                <div class="md-footer-copyright__highlight">
                    Copyright &copy; 2020 Uber Technologies Inc.
                </div>
                
                Website by <a href="https://twitter.com/_calio">calio</a> powered by
                <a href="https://www.mkdocs.org">MkDocs</a>,
                <a href="https://squidfunk.github.io/mkdocs-material/">Material for MkDocs</a>,
                <a href="http://www.styleshout.com/">styleshout</a>.
            </div>

            <!-- Social links -->
            
            
            
        </div>
    </div>
</footer>
      
    </div>
    
      <script src="../assets/javascripts/application.808e90bb.js"></script>
      
      <script>app.initialize({version:"1.0.4",url:{base:".."}})</script>
      
    
  </body>
</html>